package com.sg.dto.biz.app.req;

import com.sg.dto.biz.app.common.ExecuteCycleStageDto;
import com.sg.common.dto.BaseDto;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;

import javax.validation.constraints.NotNull;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

/**
 * @desc CalculateAcceptAboveFieldsReqDto
 * @使用场景
 */
@Data
public class CalculateAcceptAboveFieldsReqDto
        extends BaseDto
        implements Serializable {

    @ApiModelProperty("执行周期阶段列表")
    private List<ExecuteCycleStageDto> executeCycleStageList = new ArrayList<>();
    /**
     * 是否 TRUE:是 FALSE:否
     */
    @ApiModelProperty("是否")
    private String tureOrFalse;
    /**
     * 标准数据计算周期模型 LAST_CYCLE:末级周期 MID_OF_PROCESS_CYCLE:中间周期 MID_PROGRESS_CYCLE:过程中期 SUB_CYCLE:子周期 MID_CYCLE:中期 PARENT_CYCLE:父周期
     */
    @NotNull(message = "标准数据计算周期模型不能为空")
    @ApiModelProperty("标准数据计算周期模型")
    private String standardDataCalcCycleModel;
    /**
     * 被评对象类型编码 EVA_PORTRAIT:评价画像 EVA_OBJECT:评价对象 FLEVEL_OBJ_TASK_DUTY_DEPT:一级部门目标任务责任部门 OKR_SUBJECT_DEPT:OKR责任主体部门 OKR_SUBJECT_PERSONAL:OKR责任主体个人
     */
    @NotNull(message = "被评对象类型编码不能为空")
    @ApiModelProperty("被评对象类型编码")
    private String evaObjTypeCode;
    /**
     * 生命周期操作 CREATE:新增 DELETE:删除 ARCHIVE:存档 MIXTURE:混合 UNDO_ARCHIVE:撤销存档
     */
    @NotNull(message = "生命周期操作不能为空")
    @ApiModelProperty("生命周期操作")
    private String subjectLifeCycleOpt;
    /**
     * 定时任务调度记录ID
     */
    @NotNull(message = "定时任务调度记录ID不能为空")
    @ApiModelProperty("定时任务调度记录ID")
    private String timingTaskDispatchId;
    /**
     * 父周期开始时间是否定制 TRUE:是 FALSE:否
     */
    @NotNull(message = "父周期开始时间是否定制不能为空")
    @ApiModelProperty("父周期开始时间是否定制")
    private String fatherCycleStartTimeIsModify;
    /**
     * 父周期结束时间是否定制 TRUE:是 FALSE:否
     */
    @ApiModelProperty("父周期结束时间是否定制")
    private String fatherCycleEndTimeIsModify;
    /**
     * 周期开始时间
     */
    @NotNull(message = "周期开始时间不能为空")
    @ApiModelProperty("周期开始时间")
    private Date cycleStartTime;
    /**
     * 周期结束时间
     */
    @NotNull(message = "周期结束时间不能为空")
    @ApiModelProperty("周期结束时间")
    private Date cycleEndTime;
    /**
     * 周期配置标识
     */
    @NotNull(message = "周期配置标识不能为空")
    @ApiModelProperty("周期配置标识")
    private String cycleConfCode;
    /**
     * 时段开始时间
     */
    @NotNull(message = "时段开始时间不能为空")
    @ApiModelProperty("时段开始时间")
    private Date timePeriodStartTime;

    /**
     * 时段结束时间
     */
    @NotNull(message = "时段结束时间不能为空")
    @ApiModelProperty("时段结束时间")
    private Date timePeriodEndTime;

    /**
     * 通用时间字段1
     */
    @NotNull(message = "通用时间字段1不能为空")
    @ApiModelProperty("通用时间字段1")
    private Date comTimeField1;

    /**
     * 通用时间字段2
     */
    @NotNull(message = "通用时间字段2不能为空")
    @ApiModelProperty("通用时间字段2")
    private Date comTimeField2;
    /**
     * 被评对象目标周期ID
     */
    @ApiModelProperty("被评对象目标周期ID")
    private String evaObjTargetCycleId;

    /**
     * 周期ID
     */
    @ApiModelProperty("周期ID")
    private String cycleId;

    /**
     * 冗余评价模板ID
     */
    @ApiModelProperty("冗余评价模板ID")
    private String evaluationTemplateId;

    /**
     * 创建于空间ID
     */
    @ApiModelProperty("创建于空间ID")
    private String spaceId;

    /**
     * 末级周期类型 HALF_YEAR:半年 QUARTER:季度 DOUBLE_MONTHS:双月 MONTH:月 DOUBLE_WEEKS:双周 WEEK:周
     */
    @ApiModelProperty("末级周期类型")
    private String lastCycleType;

    /**
     * 父周期周期类型
     */
    @ApiModelProperty("父周期周期类型")
    private String fatherCycleType;

    /**
     * 中期周期类型
     */
    @ApiModelProperty("中期周期类型")
    private String midCycleType;

    /**
     * 子周期周期类型
     */
    @ApiModelProperty("子周期周期类型")
    private String subcycleType;

    /**
     * 当前周期类型
     */
    @ApiModelProperty("当前周期类型")
    private String currentCycleType;

    /**
     * 执行周期阶段ID
     */
    @ApiModelProperty("执行周期阶段ID")
    private String executeCycleStageId;

    /**
     * 周期类型标识
     */
    @ApiModelProperty("周期类型标识")
    private String cycleTypeCode;

    /**
     * 是否有过程周期 TRUE:是 FALSE:否
     */
    @ApiModelProperty("是否有过程周期")
    private String haveProcessCycle;

    /**
     * 周期模式 FATHER_SON_CYCLE:父子周期 SINGLE_CYCLE:单周期 IRREGULAR_CYCLE:不规则周期
     */
    @ApiModelProperty("周期模式")
    private String cycleMode;

    /**
     * 任务ID
     */
    @ApiModelProperty("任务ID")
    private String taskId;

    /**
     * 周期阶段资料记录ID
     */
    @ApiModelProperty("周期阶段资料记录ID")
    private String cycleStageDataId;

    /**
     * 评价模板数据参数
     */
    @ApiModelProperty("评价模板数据参数")
    private String schemeDataPara;

    /**
     * 汇报类型 ARTIFICIAL_REPORT:人工汇报 SEMIAUTOMATIC_REPORT:半自动汇报 AUTO_REPORT:全自动汇报
     */
    @ApiModelProperty("汇报类型")
    private String reportType;

    /**
     * 实际得分是否开启本级得分 TRUE:是 FALSE:否
     */
    @ApiModelProperty("实际得分是否开启本级得分")
    private String actualScoreIsOpenLocalLevelScore;

    /**
     * 是否开启下级汇报限制 TRUE:是 FALSE:否
     */
    @ApiModelProperty("是否开启下级汇报限制")
    private String isOpenSubReportLimit;

    /**
     * 冗余开启OKR场景
     */
    @ApiModelProperty("冗余开启OKR场景")
    private String isOkrPlanScene;

    /**
     * 开启或不开启过程中期 TRUE:是 FALSE:否
     */
    @ApiModelProperty("开启或不开启过程中期")
    private String openOrCloseMidProcess;

    /**
     * 开启或不开启中期 TRUE:是 FALSE:否
     */
    @ApiModelProperty("开启或不开启中期")
    private String openOrCloseMidCycle;

    /**
     * 实际值小数点规则
     */
    @ApiModelProperty("实际值小数点规则")
    private Long actualValueDecimalPoint;

    /**
     * 最终实际得分小数点规则
     */
    @ApiModelProperty("最终实际得分小数点规则")
    private Long scoreDecimalPoint;

    /**
     * 进度小数点规则
     */
    @ApiModelProperty("进度小数点规则")
    private Long progressDecimalPoint;

    /**
     * 小数最后一位规则 MALING:尾数抹零 ROUNDED:尾数四舍五入
     */
    @ApiModelProperty("小数最后一位规则")
    private String decimalDigitsLastRules;

    /**
     * 自定义字段
     */
    @ApiModelProperty("自定义字段")
    private String customField;

    /**
     * 主观得分权重
     */
    @ApiModelProperty("主观得分权重")
    private Double subjectiveScoreWeight;

    /**
     * 客观得分权重
     */
    @ApiModelProperty("客观得分权重")
    private Double objectiveScoreWeight;

    /**
     * 过程中期权重
     */
    @ApiModelProperty("过程中期权重")
    private Double processMidWeight;

    /**
     * 汇报平均分权重
     */
    @ApiModelProperty("汇报平均分权重")
    private Double reportAvgScoreWeight;

    /**
     * 下级KR权重
     */
    @ApiModelProperty("下级KR权重")
    private Double krWeight;

    /**
     * 过程汇报得分权重
     */
    @ApiModelProperty("过程汇报得分权重")
    private Double processReportScoreWeight;

    /**
     * 主客观得分权重
     */
    @ApiModelProperty("主客观得分权重")
    private Double subjectiveAndObjectiveScoreWeight;

    /**
     * 本级得分权重
     */
    @ApiModelProperty("本级得分权重")
    private Double localLevelScoreWeight;

    /**
     * 下级得分权重
     */
    @ApiModelProperty("下级得分权重")
    private Double lowerLevelScoreWeight;

    /**
     * 中期汇报得分权重
     */
    @ApiModelProperty("中期汇报得分权重")
    private Double midReportWeight;

    /**
     * 下级O权重
     */
    @ApiModelProperty("下级O权重")
    private Double oWeight;

    /**
     * 过程中期周期类型
     */
    @ApiModelProperty("过程中期周期类型")
    private String midOfProcessCycleType;

    /**
     * 是否自定义执行周期阶段 TRUE:是 FALSE:否
     */
    @ApiModelProperty("是否自定义执行周期阶段")
    private String isDefinedExecuteCycleStage;

    /**
     * 下级目标O权重
     */
    @ApiModelProperty("下级目标O权重")
    private Double subObjectWeight;

    /**
     * 主观评分满分值
     */
    @ApiModelProperty("主观评分满分值")
    private Long subjectiveRatingTotalValue;
    /**
     * 过程汇报得分_过程中期权重
     */
    @ApiModelProperty("过程汇报得分_过程中期权重")
    private Double processReportScoreProMidWeight;

    /**
     * 过程汇报得分_汇报平均分权重
     */
    @ApiModelProperty("过程汇报得分_汇报平均分权重")
    private Double processReportScoreAvgWeight;

    /**
     * 过程汇报得分_下级KR权重
     */
    @ApiModelProperty("过程汇报得分_下级KR权重")
    private Double processReportScoreKrWeight;

    /**
     * 汇报得分_过程汇报得分权重
     */
    @ApiModelProperty("汇报得分_过程汇报得分权重")
    private Double reportScoreProcessWeight;

    /**
     * 汇报得分_主客观得分权重
     */
    @ApiModelProperty("汇报得分_主客观得分权重")
    private Double reportScoreSubAndObjWeight;

    /**
     * 实际得分_本级汇报得分权重
     */
    @ApiModelProperty("实际得分_本级汇报得分权重")
    private Double actualScoreLocalLevelWeight;

    /**
     * 实际得分_下级汇报得分权重
     */
    @ApiModelProperty("实际得分_下级汇报得分权重")
    private Double actualScoreLowerLevelWeight;

    /**
     * 过程汇报得分_中期得分权重
     */
    @ApiModelProperty("过程汇报得分_中期得分权重")
    private Double processReportScoreMidWeight;

    /**
     * 参照值_下级O权重
     */
    @ApiModelProperty("参照值_下级O权重")
    private Double referenceObWeight;

    /**
     * 参照值_下级KR权重
     */
    @ApiModelProperty("参照值_下级KR权重")
    private Double referenceKrWeight;
    /**
     * 是否末级周期 TRUE:是 FALSE:否
     */
    @ApiModelProperty("是否末级周期")
    private String isLastCycle;

    /**
     * 最近可循环周期类型编码
     */
    @ApiModelProperty("最近可循环周期类型编码")
    private String nextCyclePeriod;
    /**
     * 被评对象内容表类型编码 OMS_TARGET_CYCLE:目标周期表 OMS_EVALUATION_OBJECT_TARGET_CYCLE:被评对象目标周期表 OMS_TARGET:目标表 OMS_TARGET_CATEGORY:目标分类表 OMS_TARGET_OBJECTIVE:指标表 OMS_TASK:任务表 OMS_ORG_INDUCTION_RECORD:就职记录表 OMS_FRAMEWORK_ORIGINAL_ROLE_MEMBER:身份人员表 OMS_ORG_DEPT:部门表 OMS_BASE_HOST:宿主表 OMS_FRAMEWORK_SPACE:空间表 OMS_TSPE_CYCLE_STAGE_DATA:周期阶段资料记录 OMS_EVALUATION_TEMPLATE:评价模板 OMS_EVALUATION_PORTRAIT:评价画像表 OMS_ORG_POSITION:职务表 OMS_VIRTUAL_ORG_MEMBER:虚拟组织成员表 OMS_PLANNING:规划资料表 OMS_FRAMEWORK_USERS:个人账号表 OMS_EXECUTE_CYCLE_STAGE:执行周期阶段表 OMS_CONF_SCHEME:配置方案表 OMS_EVA_OBJ_TARGET_CYCLE_OSET:被评对象目标周期目标设置表 OMS_EVA_OBJ_TARGET_CYCLE_WEIGHT_SET:被评对象目标周期权重设置表 OMS_NOTICE:通知公告表 OMS_CYCLE:周期表 OMS_EVALUATION_SUBJECT:评价主题表 OMS_BIZ_APP_BATCH:业务应用批次表 OMS_EVA_BATCH_RELATED_SET:评价模板批次相关设置表 OMS_TARGET_CYCLE_PLAN_SET:目标周期规划设置表 OMS_TARGET_OBJECTIVE_PLAN_EXTEND:指标扩展规划设置表
     */
    @ApiModelProperty("被评对象内容表类型编码")
    private String evaObjTableTypeCode;
    /**
     * 参照值_下级O权重
     */
    @ApiModelProperty("参照值_下级O权重")
    private Double countProObWeight;

    /**
     * 参照值_下级KR权重
     */
    @ApiModelProperty("参照值_下级KR权重")
    private Double countProKrWeight;
    /**
     * 关联目标内容类型编码 TARGET:目标 TARGET_CATEGORY:目标分类 OBJECTIVE:指标
     */
    @NotNull(message = "关联目标内容类型编码不能为空")
    @ApiModelProperty("关联目标内容类型编码")
    private String targetCycleContentTypeCode;

    /**
     * 关联目标内容ID
     */
    @NotNull(message = "关联目标内容ID不能为空")
    @ApiModelProperty("关联目标内容ID")
    private String targetCycleContentId;
    /**
     * 是否父周期 TRUE:是 FALSE:否
     */
    @ApiModelProperty("是否父周期")
    private String isFatherCycle;

    /**
     * 是否中期 TRUE:是 FALSE:否
     */
    @ApiModelProperty("是否中期")
    private String isMetaphase;

    /**
     * 是否子周期 TRUE:是 FALSE:否
     */
    @ApiModelProperty("是否子周期")
    private String isSubCycle;
    /**
     * 通用数值字段（整数型）
     */
    @NotNull(message = "通用数值字段（整数型）不能为空")
    @ApiModelProperty("通用数值字段（整数型）")
    private Long comNumField;
    /**
     * 汇报任务补偿元素
     */
    @NotNull(message = "汇报任务补偿元素不能为空")
    @ApiModelProperty("汇报任务补偿元素")
    private Long reportTaskCompElement;

    /**
     * 汇报任务设置元素
     */
    @NotNull(message = "汇报任务设置元素不能为空")
    @ApiModelProperty("汇报任务设置元素")
    private String reportTaskPlusSetElement;
    /**
     * 进度值计算参照值
     */
    @ApiModelProperty("进度值计算参照值")
    private Long progressValueCalcReference;

    /**
     * 进度值计算参照值并克隆
     */
    @ApiModelProperty("进度值计算参照值并克隆")
    private Long progressValueCalcReferenceAndCopy;
    /**
     * 实际值计算参照值
     */
    @ApiModelProperty("实际值计算参照值")
    private Long actualValueCalcReference;

    /**
     * 实际值计算参照值并克隆
     */
    @ApiModelProperty("实际值计算参照值并克隆")
    private Long actualValueCalcReferenceAndCopy;
    /**
     * 计划开始时间
     */
    @ApiModelProperty("计划开始时间")
    private Date planStartTime;

    /**
     * 计划结束时间
     */
    @ApiModelProperty("计划结束时间")
    private Date planEndTime;
    /**
     * 汇报任务验证操作 COMP_GEN_REPORT_TASK:补偿生成任务 MODIFY_REPORT_TASK:修改汇报任务 RESET_REPORT_TASK:重置汇报任务 RESET_REPORT_TASK_AND_DATA:重置汇报任务及标准数据
     */
    @NotNull(message = "汇报任务验证操作不能为空")
    @ApiModelProperty("汇报任务验证操作")
    private String reportTaskOperation;
    /**
     * 数据结果ID
     */
    @ApiModelProperty("数据结果ID ")
    private String dataResultId;
    /**
     * 更新周期ID
     */
    @ApiModelProperty("更新周期ID")
    private String updateCycleId;

    /**
     * 冗余目标ID
     */
    @ApiModelProperty("冗余目标ID")
    private String targetId;

    /**
     * 子周期类型是否等于末级周期类型 EQUAL:等于 NOT_EQUAL:不等于
     */
    @ApiModelProperty("子周期类型是否等于末级周期类型")
    private String subCycleIsLastCycle;
    /**
     * 全模版托底实时计算元素
     */
    @NotNull(message = "全模版托底实时计算元素不能为空")
    @ApiModelProperty("全模版托底实时计算元素")
    private Long evaUnderpinCalcElement;
    /**
     * 修订权重全模版重新计算元素
     */
    @ApiModelProperty("修订权重全模版重新计算元素")
    private Long reviseWeightReCalcElement;
    /**
     * 牵头人角色标识
     */
    @NotNull(message = "牵头人角色标识不能为空")
    @ApiModelProperty("牵头人角色标识")
    private String initiator;

    /**
     * 责任人角色标识
     */
    @NotNull(message = "责任人角色标识不能为空")
    @ApiModelProperty("责任人角色标识")
    private String personLiable;
    @ApiModelProperty("角色Code列表 ")
    List<String> roleCodeList = new ArrayList<>();
    /**
     * 执行进度值
     */
    @ApiModelProperty("执行进度值")
    private Double executeProgressValue;

    /**
     * 用途类型编码
     */
    @ApiModelProperty("用途类型编码")
    private String useTypeCode;

    /**
     * 主观评分满分值单位
     */
    @ApiModelProperty("主观评分满分值单位")
    private String subjectiveRatingTotalValueUnit;
    /**
     * 是否工作周期数据 TRUE:是 FALSE:否
     */
    @ApiModelProperty("是否工作周期数据")
    private String isWorkCycleData;
    /**
     * 工作周期更新切片
     */
    @NotNull(message = "工作周期更新切片不能为空")
    @ApiModelProperty("工作周期更新切片")
    private String workCycleUpdateSlice;
    /**
     * 角色标识
     */
    @NotNull(message = "角色标识不能为空")
    @ApiModelProperty("角色标识")
    private String roleCode;

    /**
     * 评价填报角色类型编码 VALUATOR:评价角色 APPLICANT:填报角色
     */
    @NotNull(message = "评价填报角色类型编码不能为空")
    @ApiModelProperty("评价填报角色类型编码")
    private String roleTypeCode;
    /**
     * 是否负责人 TRUE:是 FALSE:否
     */
    @ApiModelProperty("是否负责人")
    private String isPersonCharge;
    /**
     * 父子中过程周期类型 PARENT_CYCLE:父周期 MID_CYCLE:中期 SUB_CYCLE:子周期 PROCESS_CYCLE:过程周期
     */
    @NotNull(message = "父子中过程周期类型不能为空")
    @ApiModelProperty("父子中过程周期类型")
    private String parentSubMidCycleType;

}
